// cloud/functions/create_room/index.js
const cloud = require('wx-server-sdk');

cloud.init();
const db = cloud.database();

exports.main = async (event, context) => {
  const { ownerOpenid,selectedCapacity } = event; // 获取房主的openid,房间初始容量
  const currentUserCount = 1; // 房间初始已有用户数

  // 生成六位数字的房间号
  const roomId = generateRoomId(ownerOpenid); // 使用房主的openid生成房间号

  // 存储房间信息到数据库
  const result = await db.collection('rooms').add({
    data: {
      roomId, // 房间号
      ownerOpenid, // 房主的openid
      selectedCapacity, // 房间容量
      currentUserCount, // 当前已有用户数
      createTime: new Date(), // 创建时间
      //10.23  为了实现我的第二个功能我修改了数据库格式，解构的时候注意有三个键
      userList: [{  
        openid: ownerOpenid,    //openid
        avatarUrl: 'cloud://avalon-cloud-1gg01hi5d0e8cec0.6176-avalon-cloud-1gg01hi5d0e8cec0-1330536532/images/hostAvatar.png', // 头像URL  
        nickname: '房主' // 昵称  
      }  ] // 初始化已有用户列表，包括房主
    }
  });

  return {
    roomId: roomId, // 返回房间号
    message: '房间创建成功' // 成功信息
  };
};

// 生成六位数字房间号的函数
function generateRoomId(ownerOpenid) {
  const timestamp = Date.now(); // 获取当前时间戳
  const hash = Math.abs(ownerOpenid.hashCode()) + (timestamp % 1000000); // 根据openid生成哈希值
  const roomId = hash % 1000000; // 确保房间号在六位数范围内
  return roomId.toString().padStart(6, '0'); // 转换为字符串并补齐六位数
}

// String.prototype.hashCode 方法
String.prototype.hashCode = function() {
  let hash = 0, i, chr;
  for (i = 0; i < this.length; i++) {
    chr = this.charCodeAt(i);
    hash = ((hash << 5) - hash) + chr; // hash * 31 + chr
    hash |= 0; // Convert to 32bit integer
  }
  return hash;
};
